package com.tiancheng.trade.settlement.model.merchant;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.tiancheng.trade.settlement.util.LongJsonDeserializer;
import com.tiancheng.trade.settlement.util.LongJsonSerializer;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

import jakarta.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 商户清分规则表
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@TableName(value = "merchant_settle_rule")
public class MerchantSettleRule {

    @JsonDeserialize(using = LongJsonDeserializer.class)
    @JsonSerialize(using = LongJsonSerializer.class)
    @TableId(type = IdType.AUTO)
    private Long id;      //主键

    @JsonProperty("created_by")
    private String createdBy; //创建人

    @JsonProperty("created_dt")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createdDt;//创建时间

    @JsonProperty("last_upd_by")
    private String lastUpdBy;

    @JsonProperty("last_upd_dt")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastUpdDt;

    /**
     * 交易中台商户编码
     */
    @NotBlank(message = "交易中台商户编码不能为空")
    @JsonProperty("merchant_code")
    private String merchantCode;
    /**
     * 规则编码
     */
    @JsonProperty("rule_code")
    private String ruleCode;
    /**
     * 平台分佣百分比值
     */
    @JsonProperty("platform_percent")
    private BigDecimal platformPercent;
    /**
     * 清分周期类型：T=按日（如T+1），M=按月固定日（如每月10日）
     *
     * @see com.tiancheng.trade.settlement.enums.MerchantSettleRuleCycleTypeEnum
     */
    @JsonProperty("cycle_type")
    private String cycleType;
    /**
     * 清分周期值，cycle_type为T，cycle_value为1时代表T+1清分
     */
    @JsonProperty("cycle_value")
    private String cycleValue;
    /**
     * 规则状态：1=生效；2:作废
     *
     * @see com.tiancheng.trade.settlement.enums.SettlementStatusEnum
     */
    @JsonProperty("rule_status")
    private Integer ruleStatus;
    /**
     * 规则失效时间
     */
    @JsonProperty("expire_date")
    private LocalDateTime expireDate;
    /**
     * 备注
     */
    @JsonProperty("remark")
    private String remark;

    /**
     * 该属性为多余属性，无用
     */
    @TableField(exist = false)
    @JsonProperty("is_delete")
    private Integer isDelete;
    /**
     * 商户名称
     */
    @TableField(exist = false)
    @JsonProperty("merchant_name")
    private String merchantName;
    /**
     * 商户名称
     */
    @TableField(exist = false)
    @JsonProperty("settlement_type")
    private String settlementType;
}
